{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "ExecuteTime": {
     "start_time": "2021-11-26T16:24:00.200Z"
    }
   },
   "outputs": [],
   "source": [
    "import fdtd\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import scipy as sp\n",
    "import re\n",
    "import os\n",
    "import sys\n",
    "import scipy.constants as sc"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Analysis and Process the properties of materials"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-11-26T15:57:56.656697Z",
     "start_time": "2021-11-26T15:57:56.653011Z"
    }
   },
   "outputs": [],
   "source": [
    "fdtd.set_backend(\"numpy\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-11-26T15:57:58.488345Z",
     "start_time": "2021-11-26T15:57:57.883113Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4.381387909575201\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(1, 20, '$\\\\mu = $4.381387909575201$\\\\lambda$ + -0.14791991896582346')"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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/vprdu06u/yCyWTijz/+4Omnn+ajjz7i1KlTKKXIz8/nyy+/5Oabb+bZZ5/l8OGza9ocPHiQ22+/nS5duvDee+/Z9p85c4ZHH32Uzp07ExERwX//+1/bc0ePHuXBBx9k2LBhTJgwgSVLltjKX7BgAU899RRvvvkm3377LSLCpk2bmDx5Mjt37mTXrl2cOXN27Zq1a9cyd+5c+vfvj8ViYe7cuRw5cgQ3NzeGDh3Kv//9b/z9/XnllVcA6Nu3L7NnPMXvY8yMbZnIR3GtyBz/O5GujoxcOJLF2xezevVqBg0YhLPZ6F5dt24d33//PQsWLGDPnj3MmjULL6/zrbVTsQYV9DWtoasP055s2bKFBx54gDfffJPjx89dCOvo0aPcc8899OnThw8//BAAi8VS5vfGjRvp0KGD7fk5c+YQHBzM8OHDCQ0NpXfv3sTExHDs2DEeeeQRHnzwQR577DF++uknWzmJiYnMnj2b6dOnlwnU69at46OPPqJFixbs27ePTz/9FIClS5fy888/88QTT+Dt7c1HH31kO8bNzY0777yTm2++mejoaNv+33//nYSEBA4dOsTMmTNZv349f/31F4CtLvv27eOVV17hp59+wmKxsHXrVn766Sf++OMP1q5dy4cffohSCicnJ2677TZmzpzJnDlzmDBhAmazGYDo6GiKioqYPHkyTz75JKdOnSI5OZkrr7ySRx55hAEDBnDzzTeTn5/P0UNxBOyZQ8T2x2jqlEenu97gjFNLih1cCWsaxq2dbyXlQAqpqamMHz+etLQ0298lPz+f1q1bs2/fPjIzM3Fzq/5QzRI66GuNVl5eHllZWSQnJ5ORkQFAeno6MTExREdHs23bNqKiosjMzCQzM5NFixbx888/M2fOHFavXg0YAePdd99l+vTp/Pe//yUpKalMGcuWLePaa6/loYceYu/evSiliIuLY+zYsXTp0oU333wTwBY8AD788EN69uzJtm3bgPOfKNLS0s4psyIleezdu5f33nuPTp06ceLECd56661z0jo6OnLVVVfRv39/Nm/eXOZ4BwcHzpw5w/Lly2nXrh3p6ekA3H///Rw9epSNGzfyySef0L59e/r27cu8efNwd3dn27ZtvPnmmyxfvtzWQm7bti1z587l/fffx2Qy1ljPyclhy5YtdO/enaeffponnniC1NRUNmzYwJEjR+jd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8cYb2bt3b5VBX0QwmUw4OjravqKXHp9rMpk4c+YMjo6OKKVsAdDZ2dn2TwHGycNisdCsWTPS0tLO+w3F2dmZdu3akZuby/r163n44Yc5c+YMZ86c4fjx48TFxfHGG2+wadMmBg0aZDuudOu1JP+uXbsSFxfH8ePHefTRRxk+fDhHjx4lMzOTbdu2UVBQwMMPP8xXX33F5MmTbXkdOnQIpRStWrVCRAgJCeH1118nOjoaDw8PIiMjCQwMxNvb2zYipKioiPz8fAIDjWnFAwMDef3113njjTdITk7mnXfeoWStBn9/f8D42j9gwAB27txJjx49yM3N5a+//uKGG26wvf+l/7ECAwMJDAy0XRP55ptvyMrKKtNd5+LiQnBwsO1Cm5OTE8uXL7ddUwDj21LpbwJZWVnMmzePe+65h3bt2tGhQwd27tzJPffcU+HfqLCwkLS0NNtnrri4uEzgdnd3LxM0AK644gratWvHgw8+SEFBAe3ataNXr16cPHmSDz74gHfeeYe0tDT++c9/smHDBuLj4xk2bBjTpk3j+uuvt30DBOOaQulviykpKRw+fJihQ4faGgIZGRk8++yzWCwWOnXqxKxZs2zpCwoK+OWXXzh9+jTXX389a9asISQkhMDAQNzc3FBKMXjwYO69917AaLnfeuutODg40KxZM6655hpbXn5+frz22muICG5ubjg7O9OsWTNcXFyYM2cOZrMZFxeXMp/5oKAg28mzvN69e9su+oPxGejVqxfffvtthekBrurfm6vS50P0dxDck9Mj3yTOksMtHUYAcOO1N9LU/eyNVF27dq00r/MpuRailLqoe2mqDPpKqTbA10BzQIDZIvJ/Sil/YD7QHogH7hSR9AqOvxd40br5uojMveBallOdFvmlsHnzZkSEU6dOVXjR7M8//6wyj4KCAp577jmWLFnCl19+yZ49exg1atR5jzGZTLavrBaLhaKiojLjc52dnWnTpk2ZvvySD0ZJv6vJZCItLY38/HxOnjxJTk4OxcXFpKWl4e/vb2uVl3yIHB0d8fLywtPTk9atW9sCWqdOnQgICMDNzY0hQ4bw559/MmjQIFtgdHV1tZVd/qTi6+tL+/btWbt2LRaLxRZAXFxcaNeuHadOnbLVITs7m61bt9ouCJbo1q0b3bp1Izk5mTfeeIN169YRHR1t66cF46T6448/2t6v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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Get Refractive Data of W:\n",
    "from scipy.optimize import leastsq\n",
    "df = pd.read_csv(\"./indexdata/W-Refractive Index.csv\")\n",
    "lambdas = df.iloc[:, 0]\n",
    "permittivities = df.iloc[:, 1]\n",
    "permeabilities = df.iloc[:, 2]\n",
    "plt.title(r\"$\\epsilon$ and $\\mu$ to $lambda$ in material W\")\n",
    "plt.plot(lambdas, permittivities, label=r\"$\\epsilon-\\lambda$\")\n",
    "plt.plot(lambdas, permeabilities, label=r\"$\\mu-\\lambda$\")\n",
    "plt.xlabel(r\"$\\lambda :(\\mu m)$\")\n",
    "plt.xlim(0.3e-3, 5)\n",
    "\n",
    "plt.annotate(r\"$\\mu\\ Starts\\ fitting\\ in\\ a\\ line$\", xy=(1.3, 5), xytext=(0.7, 14), arrowprops=dict(arrowstyle=\"->\"))\n",
    "\n",
    "X = lambdas\n",
    "Y = permeabilities\n",
    "def delta(initxy):#p is an arg list\n",
    "    k, b = initxy\n",
    "    return (Y - X*k - b)\n",
    "\n",
    "r = leastsq(delta, [0, 0])\n",
    "k, b = r[0]\n",
    "\n",
    "\n",
    "pred_Y = lambdas * k - b\n",
    "plt.ylim(0, 22)\n",
    "plt.plot(lambdas, pred_Y, linestyle=\":\", markersize=0.1, label=r\"fitting $\\mu - \\lambda$\")\n",
    "plt.legend()\n",
    "formula_expr = r\"$\\mu = $\" + str(k) + \"$\\lambda$ + \" + str(b)\n",
    "print(k)\n",
    "plt.annotate(formula_expr, \n",
    "             xy=(1, 20), xytext= (1, 20),\n",
    "            rotation=np.arctan(k))\n",
    "\n",
    "# TODO!!!:  拟合磁导率，\n",
    "# TODO!!!:  拟合介电常数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def \n",
    "def permittivity(l):\n",
    "        \n",
    "def Wlambda2coff(wavelength):\n",
    "    return permittivity(wavelength), permeability(wavelength)\n",
    "thickness = 50e-9\n",
    "width = 1.0\n",
    "length = 1.0\n",
    "unitwidth = 10e-9\n",
    "permittivity = # Electronic constant\n",
    "permeability = # Magnetic conduct coff\n"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-11-26T06:12:02.273613Z",
     "start_time": "2021-11-26T06:12:02.064382Z"
    }
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-11-26T15:35:08.248429Z",
     "start_time": "2021-11-26T15:35:08.230653Z"
    }
   },
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'dirs' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m-------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                               Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-63-c10b02fd98a9>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mdir\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mdirs\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m     \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdir\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNameError\u001b[0m: name 'dirs' is not defined"
     ]
    }
   ],
   "source": [
    "for dir in dirs:\n",
    "    print(dir)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-11-26T16:00:57.199138Z",
     "start_time": "2021-11-26T16:00:57.195751Z"
    }
   },
   "outputs": [],
   "source": [
    "# Assemble all refractive indexes\n",
    "import sys, os\n",
    "import os.path as op\n",
    "import re "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "ExecuteTime": {
     "start_time": "2021-11-26T16:21:40.225Z"
    }
   },
   "outputs": [],
   "source": [
    "dirs = [op.join('indexdata', p) for p in os.listdir('./indexdata')]\n",
    "pattern = r\"/[\\w\\d]+[^-]\"\n",
    "regex = re.compile(pattern)\n",
    "c = 2.998e8\n",
    "mus = []\n",
    "\n",
    "for cur_dir in dirs[: 20]:\n",
    "    table = pd.read_csv(cur_dir)\n",
    "    print(table)\n",
    "    result = regex.search(cur_dir)\n",
    "    mu = 1/ (c**2 * table.iloc[:, 1])\n",
    "    mus.append(mu)\n",
    "    plt.plot(\n",
    "            1e3 *np.array(table.iloc[:, 0].values), \n",
    "            table.iloc[:, 1], \n",
    "            label=result.group(0))\n",
    "\n",
    "#plt.yticks([])\n",
    "plt.ylim([0, 10])\n",
    "plt.xlim([0.2e3, 0.6e3])\n",
    "plt.ylabel(r\"Refractive Index $n$\")\n",
    "plt.xlabel(r\"$(\\lambda)$:nm $(0.3\\mu m\\rightarrow 0.5\\mu m)$\")\n",
    "plt.title(\"Refractive Index - Wavelength\")\n",
    "#plt.legend(bbox_to_anchor=(1.02, 1))\n",
    "plt.legend(bbox_to_anchor=(1.0,-0.2), ncol=int(len(dirs)/4)-2)\n",
    "plt.figure(figsize=(300, 500))\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "ExecuteTime": {
     "start_time": "2021-11-26T16:24:13.392Z"
    }
   },
   "outputs": [],
   "source": [
    "dirs = [op.join('./indexdata', p) for p in os.listdir('./indexdata')]\n",
    "# 等下把read_csv 全部提前导出，减少重复读取的耗时\n",
    "pattern = r\"/[\\w\\d]+[^-R]\"\n",
    "regex = re.compile(pattern)\n",
    "for cur_dir in dirs[:20]:\n",
    "\ttable = pd.read_csv(cur_dir)\n",
    "\tresult = regex.search(cur_dir)\n",
    "\tplt.plot(\n",
    "\t\t\t1e3 *np.array(table.iloc[:, 0].values), \n",
    "\t\t\ttable.iloc[:, 2], \n",
    "\t\t\tlabel=result.group(0))\n",
    "\n",
    "#plt.yticks([])\n",
    "plt.ylim([0, 8])\n",
    "plt.xlim([0.2e3, 0.8e3])\n",
    "plt.ylabel(r\"permittivity  $epsilon$ in materials\")\n",
    "plt.xlabel(r\"$(\\lambda)$:nm $(0.3\\mu m\\rightarrow 0.5\\mu m)$\")\n",
    "plt.title(r\"$\\epsilon$ - $\\lambda$\")\n",
    "#plt.legend(bbox_to_anchor=(1.02, 1))\n",
    "plt.legend(bbox_to_anchor=(1.1,-0.2), ncol=int(len(dirs)/4)-1)\n",
    "plt.figure(figsize=(800, 800))\n",
    "arrow = plt.arrow(200, 4, 100, 1, width=0.1)\n",
    "#plt.annotate(\"A Peak\", xy = (200, 2), \n",
    "#\t\txytext = (300, 3), \n",
    "#\t\tarrowprops = dict(arrowstyle=\"->\"))\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "ExecuteTime": {
     "start_time": "2021-11-26T16:24:39.590Z"
    }
   },
   "outputs": [],
   "source": [
    "print(dirs)\n",
    "\n",
    "for dir in dirs:\n",
    "    df = pd.read_csv(dir)\n",
    "    filename = regex.search(dir)\n",
    "    if np.isnan(df['k'][4]):\n",
    "        continue\n",
    "    else:\n",
    "        \n",
    "        mu_r = df['k']\n",
    "        wavelength = df.iloc[0] * 1e-6\n",
    "        n = df.iloc[1] # refractive index\n",
    "        k0 = 2 * np.pi / wavelength# k in air(vaccum)\n",
    "        kz = wavelength / n\n",
    "        epsilon = kz * sc.epsilon_0\n",
    "        mu = mu_r * sc.mu_0\n",
    "        print(f\"====={filename}=====\\n{n.values=} {mu_r.values=} {kz.values=} {epsilon.values=} {mu=}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-11-26T05:50:39.646454Z",
     "start_time": "2021-11-26T05:50:38.015Z"
    }
   },
   "outputs": [],
   "source": [
    "dirs = [op.join('./indexdata', p) for p in os.listdir('./indexdata')]\n",
    "pattern = r\"\\\\[\\w\\d]+[^-R]\"\n",
    "regex = re.compile(pattern)\n",
    "c = 2.998e8\n",
    "mus = []\n",
    "\n",
    "cur_dir = dirs[19]\n",
    "table = pd.read_csv(cur_dir)\n",
    "result = regex.search(cur_dir)\n",
    "mus = 1 / np.array([c * epsilon for epsilon in table.iloc[:, 2]])\n",
    "\n",
    "plt.plot(\n",
    "\t\t1e3 *np.array(table.iloc[:, 0].values), \n",
    "\t\tmus, \n",
    "\t\tlabel=result.group(0)\n",
    ")\n",
    "\n",
    "#plt.yticks([])\n",
    "#plt.ylim([0, 1e-8])\n",
    "#plt.xlim([0.2e3, 0.6e3])\n",
    "plt.ylabel(r\"Refractive Index $n$\")\n",
    "plt.xlabel(r\"$(\\lambda)$:nm $(0.3\\mu m\\rightarrow 0.5\\mu m)$\")\n",
    "plt.title(r\"$\\mu$ - Wavelength in \" + result.group(0))\n",
    "#plt.legend(bbox_to_anchor=(1.02, 1))\n",
    "plt.legend(bbox_to_anchor=(1.1,1.2), ncol=int(len(dirs)/4)-1)\n",
    "plt.figure(figsize=(300, 500))\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-11-26T05:50:39.663526Z",
     "start_time": "2021-11-26T05:50:38.046Z"
    }
   },
   "outputs": [],
   "source": [
    "fdtd.set_backend(\"numpy\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "2db7dd83ea3461cb8f622e29f5f058e20de98d31c070063ff55f33912d503a58"
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": true,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "position": {
    "height": "303.4px",
    "left": "736px",
    "right": "20px",
    "top": "21px",
    "width": "350px"
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
